package com.zm.test;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * 工具：将str按一定的最大长度，切分为多个字符段，英文算一个，中文算两个
 * 
 * @author zm
 * 
 */
public class ZmStringUtil {

	/**
	 * 将str按一定的最大长度，切分为多个字符段，英文算一个，中文算两个
	 * 
	 * @param str
	 *            需切分的字符串
	 * @param maxLen
	 *            每段的最大长度
	 * @return
	 */
	public static List<String> splitByLength(String str, int maxLen) {
		List<String> strList = new ArrayList<String>();

		int count = 0;
		char[] strChar = str.toCharArray();

		StringBuilder sb = null;
		sb = new StringBuilder();

		for (char c : strChar) {
			byte[] bytes = String.valueOf(c).getBytes();
			int _len = 0;
			if (bytes.length == 1) {
				_len = 1;
			} else if (bytes.length > 1) {
				_len = 2;
			} else {
				continue;
			}

			if ((count + _len) <= maxLen) {
				sb.append(c);
				count = count + _len;
			} else if ((count + _len) > maxLen) {
				// 再放入，超过 每段的最大长度，本段结束
				strList.add(sb.toString());

				// 重新计数
				sb = new StringBuilder();
				sb.append(c);
				count = _len;
			}
		} // end for

		// 把最后一个非整段放入list
		if (count > 0) {
			strList.add(sb.toString());
		}

		return strList;
	}
}
